package net.servir.capacidades.dao.jdbc;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import net.servir.capacidades.dao.SeguridadDAO;
import net.servir.capacidades.model.SegRecurso;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class JdbcSeguridadDAO implements SeguridadDAO {

	private SimpleJdbcTemplate jdbcTemplate;
	private DataSource dataSource;
	
	@Autowired
	private JdbcCapacidadesDAO jdbcCapacidadesDao;
	
	@Autowired
	public JdbcSeguridadDAO(DataSource dataSource){
		this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
		this.dataSource = dataSource;
	}
	
	public List<SegRecurso> getOpcionesMenu(String dni)
	{
		List<SegRecurso> list = new LinkedList<SegRecurso>();

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_RECURSO,RECURSO,TIPO,ORDEN,HREF,TARGET,CAPTION");
		sql.append(" FROM SEG_RECURSO");
		sql.append(" WHERE tipo = 'M'");
		sql.append(" and id_recurso in (Select pe.id_recurso from seg_usuario_perfil up join  seg_perfil_permiso pp on up.id_perfil = pp.id_perfil");
		sql.append(" join seg_permiso pe on pp.id_permiso = pe.id_permiso where up.cod_usuario = ?)");
		sql.append(" ORDER BY orden");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),dni);
		for(Map<String, Object> rec : collec){
			SegRecurso obj = new SegRecurso();
			obj.setId_recurso((Number)rec.get("ID_RECURSO"));
			obj.setRecurso((String)rec.get("RECURSO"));
			obj.setTipo((String)rec.get("TIPO"));
			obj.setOrden((String)rec.get("ORDEN"));
			obj.setHref((String)rec.get("HREF"));
			obj.setTarget((String)rec.get("TARGET"));
			obj.setCaption((String)rec.get("CAPTION"));

			list.add(obj);
		}
		return list;		
	}
	
	public ArrayList<Number> getPermisosUsuario(String dni)
	{
		ArrayList<Number> list = new ArrayList<Number>();

		StringBuilder sql = new StringBuilder();
		sql.append("Select distinct pe.id_permiso from seg_usuario_perfil up join  seg_perfil_permiso pp on up.id_perfil = pp.id_perfil");
		sql.append(" join seg_permiso pe on pp.id_permiso = pe.id_permiso");
		sql.append(" where up.cod_usuario = ?");
		sql.append(" ORDER BY 1");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),dni);
		for(Map<String, Object> rec : collec){
			list.add((Number)rec.get("ID_PERMISO"));
		}
		return list;		
		
	}
	public ArrayList<Number> getRecursosUsuario(String dni)
	{
		ArrayList<Number> list = new ArrayList<Number>();

		StringBuilder sql = new StringBuilder();
		sql.append("Select distinct pe.id_recurso from seg_usuario_perfil up join  seg_perfil_permiso pp on up.id_perfil = pp.id_perfil");
		sql.append(" join seg_permiso pe on pp.id_permiso = pe.id_permiso");
		sql.append(" where up.cod_usuario = ?");
		sql.append(" ORDER BY 1");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),dni);
		for(Map<String, Object> rec : collec){
			list.add((Number)rec.get("ID_RECURSO"));
		}
		return list;	
		
	}
	
}
